package com.erpanderp.wam.usm.model.entity.user;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import com.erpanderp.wam.ac.model.entity.reimbursement.ProjectPerdiem;
import com.erpanderp.wam.adm.model.entity.Role;
import com.erpanderp.wam.cm.model.entity.EmpPersonalResume;
import com.erpanderp.wam.usm.model.entity.complaintandsuggestion.ComplaintAndSuggestion;
import com.erpanderp.wam.usm.model.entity.leave.EmployeeLeave;
import com.erpanderp.wam.usm.model.entity.leave.LeaveBalance;
import com.erpanderp.wam.usm.model.entity.leave.LeaveBalanceTracker;
import com.erpanderp.wam.usm.model.entity.projectandassignment.EmployeeProject;
import com.erpanderp.wam.usm.model.entity.projectandassignment.Project;
import com.erpanderp.wam.usm.model.entity.timesheet.Timesheet;

public class Employee implements Comparable<Employee>{
	private Long employeeId;
	private String employeeCode;
	private String firstName;
	private String lastName;
	private String moduleName;
	private Date dateOfJoining;
	private String authentication;
	private String designation;
	private String primarySkill;
	private String secondarySkill;
	private String email;
	private String telephone;
	private String location;
	private String relieved;
	private Date dateOfBirth;
	private String loginTime;
	private String logoutTime;
	private Date createDate;
	private Date dateModified;
	private String createdBy;
	private String modifiedBy;
	private String description;
	private String status;
	private NewJoinee newJoinee;
	private Role role;
	private String photo;
	private Set<WAMUser> WAMUsers = new HashSet<WAMUser>();

	private Set<ProjectPerdiem> projectPerdiems = new HashSet<ProjectPerdiem>();

	private Set<EmployeePhoto> employeePhotos = new HashSet<EmployeePhoto>();

	private Set<EmployeeLeave> employeeLeaves = new HashSet<EmployeeLeave>();
	private Set<LeaveBalance> leaveBalances = new HashSet<LeaveBalance>();
	private Set<EmployeeAndReporting> employeeAndReportings = new HashSet<EmployeeAndReporting>();
	private Set<Project> projects = new HashSet<Project>();
	private Set<EmployeeProject> employeeProjects = new HashSet<EmployeeProject>();
	private Set<ComplaintAndSuggestion> complaintAndSuggestions = new HashSet<ComplaintAndSuggestion>();
	private Set<Timesheet> timesheets = new HashSet<Timesheet>();
	private Set<EmpPersonalResume> employeeResumes = new HashSet<EmpPersonalResume>();
	private Set<EmployeeRole> employeeRoles = new HashSet<EmployeeRole>();
	private Set<LeaveBalanceTracker> leaveBalanceTrackers = new HashSet<LeaveBalanceTracker>();
	
	public Long getEmployeeId() {
		return employeeId;
	}
	public void setEmployeeId(Long employeeId) {
		this.employeeId = employeeId;
	}
	public String getEmployeeCode() {
		return employeeCode;
	}
	public void setEmployeeCode(String employeeCode) {
		this.employeeCode = employeeCode;
	}
	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	public String getModuleName() {
		return moduleName;
	}
	public void setModuleName(String moduleName) {
		this.moduleName = moduleName;
	}
	public String getAuthentication() {
		return authentication;
	}
	public void setAuthentication(String authentication) {
		this.authentication = authentication;
	}
	public String getDesignation() {
		return designation;
	}
	public void setDesignation(String designation) {
		this.designation = designation;
	}
	public String getPrimarySkill() {
		return primarySkill;
	}
	public void setPrimarySkill(String primarySkill) {
		this.primarySkill = primarySkill;
	}
	public String getSecondarySkill() {
		return secondarySkill;
	}
	public void setSecondarySkill(String secondarySkill) {
		this.secondarySkill = secondarySkill;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getTelephone() {
		return telephone;
	}
	public void setTelephone(String telephone) {
		this.telephone = telephone;
	}
	public String getLocation() {
		return location;
	}
	public void setLocation(String location) {
		this.location = location;
	}
	public String getRelieved() {
		return relieved;
	}
	public void setRelieved(String relieved) {
		this.relieved = relieved;
	}
	public Date getDateOfBirth() {
		return dateOfBirth;
	}
	public void setDateOfBirth(Date dateOfBirth) {
		this.dateOfBirth = dateOfBirth;
	}
	public Date getCreateDate() {
		return createDate;
	}
	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}
	public Date getDateModified() {
		return dateModified;
	}
	public void setDateModified(Date dateModified) {
		this.dateModified = dateModified;
	}
	public String getCreatedBy() {
		return createdBy;
	}
	public void setCreatedBy(String createdBy) {
		this.createdBy = createdBy;
	}
	public String getModifiedBy() {
		return modifiedBy;
	}
	public void setModifiedBy(String modifiedBy) {
		this.modifiedBy = modifiedBy;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public NewJoinee getNewJoinee() {
		return newJoinee;
	}
	public void setNewJoinee(NewJoinee newJoinee) {
		this.newJoinee = newJoinee;
	}
	public Role getRole() {
		return role;
	}
	public void setRole(Role role) {
		this.role = role;
	}
	public Set<WAMUser> getWAMUsers() {
		return WAMUsers;
	}
	public void setWAMUsers(Set<WAMUser> wAMUsers) {
		WAMUsers = wAMUsers;
	}
	public Set<EmployeeLeave> getEmployeeLeaves() {
		return employeeLeaves;
	}
	public void setEmployeeLeaves(Set<EmployeeLeave> employeeLeaves) {
		this.employeeLeaves = employeeLeaves;
	}
	public Set<LeaveBalance> getLeaveBalances() {
		return leaveBalances;
	}
	public void setLeaveBalances(Set<LeaveBalance> leaveBalances) {
		this.leaveBalances = leaveBalances;
	}
	public Set<EmployeeAndReporting> getEmployeeAndReportings() {
		return employeeAndReportings;
	}
	public void setEmployeeAndReportings(
			Set<EmployeeAndReporting> employeeAndReportings) {
		this.employeeAndReportings = employeeAndReportings;
	}
	public Set<Project> getProjects() {
		return projects;
	}
	public void setProjects(Set<Project> projects) {
		this.projects = projects;
	}
	public Set<EmployeeProject> getEmployeeProjects() {
		return employeeProjects;
	}
	public void setEmployeeProjects(Set<EmployeeProject> employeeProjects) {
		this.employeeProjects = employeeProjects;
	}
	public Set<ComplaintAndSuggestion> getComplaintAndSuggestions() {
		return complaintAndSuggestions;
	}
	public void setComplaintAndSuggestions(Set<ComplaintAndSuggestion> complaintAndSuggestions) {
		this.complaintAndSuggestions = complaintAndSuggestions;
	}
	public Set<Timesheet> getTimesheets() {
		return timesheets;
	}
	public void setTimesheets(Set<Timesheet> timesheets) {
		this.timesheets = timesheets;
	}
	public Set<EmpPersonalResume> getEmployeeResumes() {
		return employeeResumes;
	}
	public void setEmployeeResumes(Set<EmpPersonalResume> employeeResumes) {
		this.employeeResumes = employeeResumes;
	}
	public Date getDateOfJoining() {
		return dateOfJoining;
	}
	public void setDateOfJoining(Date dateOfJoining) {
		this.dateOfJoining = dateOfJoining;
	}
	public Set<EmployeeRole> getEmployeeRoles() {
		return employeeRoles;
	}
	public void setEmployeeRoles(Set<EmployeeRole> employeeRoles) {
		this.employeeRoles = employeeRoles;
	}
	
	public boolean equals(Object obj) {
		if (!(obj instanceof Employee))
		      return false;
		if (obj == this)
		      return true;
		return  this.employeeId == ((Employee) obj).employeeId;
	}
	public Set<LeaveBalanceTracker> getLeaveBalanceTrackers() {
		return leaveBalanceTrackers;
	}
	public void setLeaveBalanceTrackers(Set<LeaveBalanceTracker> leaveBalanceTrackers) {
		this.leaveBalanceTrackers = leaveBalanceTrackers;
	}

	public Set<ProjectPerdiem> getProjectPerdiems() {
		return projectPerdiems;
	}
	public void setProjectPerdiems(Set<ProjectPerdiem> projectPerdiems) {
		this.projectPerdiems = projectPerdiems;
	}

	public Set<EmployeePhoto> getEmployeePhotos() {
		return employeePhotos;
	}
	public void setEmployeePhotos(Set<EmployeePhoto> employeePhotos) {
		this.employeePhotos = employeePhotos;
	}
	public String getPhoto() {
		return photo;
	}
	public void setPhoto(String photo) {
		this.photo = photo;
	}

	@Override
	public int compareTo(Employee o) {
		return employeeCode.compareTo(o.getEmployeeCode());
	}
	public String getLoginTime() {
		return loginTime;
	}
	public void setLoginTime(String loginTime) {
		this.loginTime = loginTime;
	}
	public String getLogoutTime() {
		return logoutTime;
	}
	public void setLogoutTime(String logoutTime) {
		this.logoutTime = logoutTime;
	}
	

}
